<?php

class Doctrine_Model_ClienteDao extends Doctrine_Model_BaseDao {
    
    public function obtenerTodos() {
        return $this->getEntityManager()
                        ->createQuery('select c from Doctrine_Model_Entities_Cliente c ORDER BY c.apellido ASC')
                        ->getResult();
    }
    
    public function obtenerPorId($id) {
        return $this->getEntityManager()->find('Doctrine_Model_Entities_Cliente', $id);
    }
    
    public function guardar(Doctrine_Model_Entities_Cliente $unCliente) {
        //var_dump($unCliente);
        try {
            $this->getEntityManager()->persist($unCliente);
            $this->getEntityManager()->flush();
            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get('logger');
            $logger->log("Error: " . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }
    
    public function buscarPorApellidoyNombre($apellido, $nombre) {
//        $listado = $this->getEntityManager()->getRepository('Doctrine_Model_Entities_Persona')
//                        ->findBy(array('apellido' => $apellido, 'nombre' => $nombre));
        if (!empty($apellido) && !empty($nombre)) {
            $query = "select p from Doctrine_Model_Entities_Cliente p WHERE p.apellido LIKE '%" . $apellido . "%' AND  p.nombre LIKE '%" . $nombre . "%' ";
        } else {
            if (!empty($apellido)) {
                $query = "select p from Doctrine_Model_Entities_Cliente p WHERE p.apellido LIKE '" . $apellido . "%'  ";
            } else {
                $query = "select p from Doctrine_Model_Entities_Cliente p WHERE   p.nombre LIKE '%" . $nombre . "%' ";
            }
        }

        $listado = $this->getEntityManager()
                        ->createQuery($query)
                        ->getResult();
        return $this->toArrayCollection($listado);
    }
    
    public function obtenerPorNumeroyTipoDeDocumento($numeroDeDocumento, $tipoDeDocumentoId) {
        if (isset($numeroDeDocumento) && isset($tipoDeDocumentoId)) {
            $result = $this->getEntityManager()
                    ->createQuery('select c from Doctrine_Model_Entities_Cliente c JOIN c.tipoDocumento td where td.id=' . $tipoDeDocumentoId . ' AND c.nroDocumento=' . $numeroDeDocumento)
                    ->getResult();
            return $result;
        } else {
            return array();
        }
    }
    
    public function eliminar(Doctrine_Model_Entities_Cliente $unCliente) {
        try {
            $this->getEntityManager()->remove($unCliente);
            $this->getEntityManager()->flush();

            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get('logger');

            $logger->log("Error: " . $e->getMessage(), Zend_Log::ERR);
            return false;
        }
    }
    
    public function obtenerEntreFechas($fecha_desde, $fecha_hasta, $sexo = NULL, $zona = NULL){
        $clientes = Array();
            $sql = "select c from Doctrine_Model_Entities_Cliente c 
                    JOIN c.ingresos i
                    JOIN i.sesiones s
                    WHERE s.fechaSesion BETWEEN '$fecha_desde' AND '$fecha_hasta'";
        
        if(!is_null($sexo)){
           $sql .= " AND c.sexo = $sexo";
        }
        if(!is_null($zona)){
           $sql .= " AND c.zona = $zona";
        }
        $sql .= " ORDER BY s.fechaSesion";
        $clientes =  $this->getEntityManager()
                        ->createQuery($sql)
                        ->getResult();
        
        return $clientes;
    }
    
    public function obtenerPorIngresosEntreFechas($fecha_desde,$fecha_hasta){
        $clientes = Array();
        $sql = "select c from Doctrine_Model_Entities_Cliente c 
        JOIN c.ingresos i WHERE i.fechaCarga  BETWEEN '$fecha_desde' AND '$fecha_hasta'";
        
        //$sql .= " ORDER BY c.ingresos.fechaCarga";
        $clientes =  $this->getEntityManager()
                        ->createQuery($sql)
                        ->getResult();
        
        return $clientes;
    }
    
    public function calculoEdad($fechaNacimiento) {
//        $dias = explode("-", $fechaNacimiento, 3);
//        $dias = mktime(0, 0, 0, $dias[1], $dias[0], $dias[2]);
//        $edad = (int) ((time() - $dias) / 31556926 );
//        return $edad;
//        
        
        $datetime1 = new DateTime($fechaNacimiento);
        $datetime2 = new DateTime();
        $intervalo = $datetime1->diff($datetime2);
        //echo $intervalo->format('%R%a días');
        return $intervalo->format('%y años');

    }

}
